#include <stdio.h>
#include <stdlib.h>

#define M 20

typedef struct {
    char ch[M];
    int len;
}sstring;

void crea(sstring *s) {
    int i, j;
    char c;
    printf("请输入建立串的长度: ");
    scanf("%d", &j);

    // 限制输入长度在 M 以内
    if (j > M) {
        printf("长度超过最大限制 %d\n", M);
        return;
    }

    for (i = 0; i < j; i++) {
        printf("请输入串的第%d个字符：\n", i + 1);
        fflush(stdin);
        scanf(" %c", &c); // 在%c前加了一个空格，以忽略前面的空白符
        s->ch[i] = c;
    }
    s->len = j;
}

void output(sstring *s) {
    int i;
    for (i = 0; i < s->len; i++)
        printf("%c", s->ch[i]);
    printf("\n"); // 输出换行
}

int strinsert(sstring *s, int pos, sstring t) {
    int i;

    // 修改条件，确保 pos 是有效的
    if (pos < 0 || pos > s->len) // pos 的检查
        return 0;

    // 检查是否可以插入
    if (s->len + t.len <= M) {
        // 从后往前插入，避免覆盖
        for (i = s->len - 1; i >= pos; i--)
            s->ch[i + t.len] = s->ch[i]; // 向后移动字符
        for (i = 0; i < t.len; i++)
            s->ch[i + pos] = t.ch[i]; // 插入新字符
        s->len += t.len; // 更新字符串长度
        return 1; // 成功插入
    } else {
        return -1; // 插入失败，超出长度
    }
}

int main() {
    sstring *str1, str2;
    int pos;

    str1 = (sstring *)malloc(sizeof(sstring));
    str1->len = 0;

    printf("建立字符串1：\n");
    crea(str1);
    
    printf("建立字符串2：\n");
    crea(&str2);
    
    printf("请输入要插入的位置：\n");
    scanf("%d", &pos); // 读取插入位置

    int result = strinsert(str1, pos, str2);
    if (result == 1) {
        output(str1);
    } else if (result == 0) {
        printf("插入位置无效。\n");
    } else {
        printf("插入失败，超出最大长度。\n");
    }

    free(str1); // 释放动态分配的内存
    return 0;
}